home *** CD-ROM | disk | FTP | other *** search
/ Just Call Me Internet / Just Call Me Internet.iso / com / othernet / fidonet / aval_377 / develop / fidosend.c < prev    next >
C/C++ Source or Header  |  1994-02-23  |  4KB  |  175 lines

  1. /*
  2.  * Vorgehensweise zum Versenden von Fido-Messages
  3.  *
  4.  * Version 1.0 by Jan Kriesten
  5.  *
  6.  */
  7.  
  8. /*
  9.  * rudiment„res Beispiel eines Programms, das senden will
  10.  * (eine Cookie-Suchroutine habe ich mir mal gespart!):
  11.  */
  12.  
  13. /*
  14.  * Mag!X Strukturen:
  15.  */
  16. typedef struct
  17. {
  18.   LONG  magic;            /* muž $87654321 sein         */
  19.   VOID  *membot;          /* Ende der AES- Variablen    */
  20.   VOID  *aes_start;          /* Startadresse               */
  21.   LONG  magic2;            /* ist 'MAGX'                 */
  22.   LONG  date;            /* Erstelldatum               */
  23.   VOID  (*chgres)(int res, int txt);/* Aufl”sung „ndern           */
  24.   LONG  (**shel_vector)(void);    /* residentes Desktop         */
  25.   BYTE  *aes_bootdrv;        /* von hieraus wurde gebootet */
  26.   WORD  *vdi_device;        /* vom AES benutzter Treiber  */
  27.   VOID  *reservd1;
  28.   VOID  *reservd2;
  29.   VOID  *reservd3;
  30.   WORD  version;
  31.   WORD  release;
  32. } AESVARS;
  33.  
  34. /* Cookie MagX --> */
  35.  
  36. typedef struct
  37. {
  38.   LONG  config_status;
  39.   VOID  *dosvars;
  40.   AESVARS  *aesvars;
  41. } MAGX_COOKIE;
  42.  
  43. /*
  44.  * Globale Variablen:
  45.  */
  46. GLOBAL MAGX_COOKIE  *MagX;
  47. GLOBAL WORD      ap_id;
  48. GLOBAL BOOLEAN    has_appl_search=FALSE;
  49.  
  50. GLOBAL WORD main( VOID )
  51. {
  52.   LONG    value;
  53.   WORD    dummy;
  54.  
  55.   MagX  = getcookie( 'MagX', &value ) ? (MAGX_COOKIE *) value : NULL;
  56.  
  57.   if( ap_id=appl_init( ), ap_id<0 )
  58.     return( -1 );
  59.  
  60.   if( _GemParBlk.globl[0]>=0x400                  ||
  61.     wind_get( 0, 'WX', &dummy, &dummy, &dummy, &dummy)=='WX'  ||
  62.     (MagX && MagX->aesvars && MagX->aesvars->version>=0x200) )
  63.   {
  64.     WORD  out3;
  65.    
  66.     if( appl_getinfo( 4, &dummy, &dummy, &out3, &dummy ) )
  67.       has_appl_search = out3 ? TRUE : FALSE;
  68.   }
  69.  
  70.   SearchAndSend( "AVALON  ", 1, 0 );
  71.  
  72.   appl_exit( );
  73.  
  74.   return( 0 );   
  75. }
  76.  
  77. /**---------------------------------------------------------------------------
  78. --
  79.  ** Funktionsname:  GLOBAL WORD SearchAndSend( BYTE *app, LONG value, WORD 
  80. extend
  81.  );
  82.  **    ->  Name der Zielapplikation und zu sendende Werte;
  83.  **    <-  Anzahl der gesendeten Nachrichten (0, wenn kein gefunden
  84.  **      wurde - logisch);
  85.  **
  86.  ** Die Funktion schickt jeder Applikation app eine Nachricht (aužer,
  87.  ** wenn die ID gleich der eigenen ist)
  88.  **/
  89. GLOBAL WORD SearchAndSend( BYTE *app, LONG value, WORD extend )
  90. {
  91.   WORD  rc, found=0;
  92.  
  93.   if( has_appl_search )
  94.   {
  95.     BYTE  name[9];
  96.     WORD  type, id;
  97.    
  98.     rc = appl_search( 0, name, &type, &id );
  99.  
  100.     while( rc )
  101.     {
  102.       if( !strncmpi( name, app, 8 ) && id!=ap_id )
  103.       {
  104.         ++found;
  105.         SendMessage( id, value, extend );
  106.       }
  107.      
  108.       rc = appl_search( 1, name, &type, &id );
  109.     }
  110.   }
  111.   else
  112.   {
  113.     rc = appl_find( app );
  114.  
  115.     if( rc>=0 && rc!=ap_id )
  116.     {
  117.       ++found;
  118.       SendMessage( rc, value, extend );
  119.     }
  120.   }
  121.  
  122.   return( found );
  123. }
  124.  
  125. /**---------------------------------------------------------------------------
  126. --
  127.  ** Funktionsname:  GLOBAL VOID SendMessage( WORD id, LONG value, WORD extend 
  128. );
  129.  **    ->  ID der Zielapplikation und zu sendende Werte;
  130.  **    <-  nichts;
  131.  **
  132.  ** Die Funktion schickt der Applikation id eine Nachricht
  133.  **/
  134. GLOBAL VOID SendMessage( WORD id, LONG value, WORD extend )
  135. {
  136.   WORD  buf[8];
  137.  
  138.   buf[0] = FIDO_MSG;
  139.   buf[1] = ap_id;
  140.   buf[2] = 0;
  141.   *((LONG *) &buf[3]) = FM_SEMPER;
  142.   *((LONG *) &buf[5]) = value;
  143.   buf[7] = extend;
  144.  
  145.   appl_write( id, 16, buf );
  146. }
  147.  
  148. GLOBAL WORD appl_getinfo( WORD ap_gtype, WORD *ap_gout1, WORD *ap_gout2, WORD 
  149. *a p_gout3, WORD *ap_gout4 )
  150. {
  151.   EXTERN AESPB  AES_pb;
  152.   WORD      *xptr;
  153.  
  154.   xptr = _GemParBlk.contrl;
  155.  
  156.   *xptr++ = 130;
  157.   *xptr++ = 1;
  158.   *xptr++ = 5;
  159.   *xptr++ = 0;
  160.   *xptr   = 0;
  161.  
  162.   _GemParBlk.intin[0] = ap_gtype;
  163.  
  164.   _crystal( &AES_pb );
  165.  
  166.   xptr = &_GemParBlk.intout[4];
  167.    
  168.   *ap_gout4 = *xptr--;
  169.   *ap_gout3 = *xptr--;
  170.   *ap_gout2 = *xptr--;
  171.   *ap_gout1 = *xptr--;
  172.  
  173.   return( *xptr );
  174. }
  175.